<?php
/**
 * Created by PhpStorm.
 * User:lyq
 * Date: 2018/8/22
 * Time: 13:49
 */

namespace app\admin\controller;

use think\Exception;
use think\Db;

class Appversion extends Common
{
    public function index(){
        //标题
        $this->templateTitle("App更新列表");

        $where = [];

        //搜索条件

        $version = request()->param("version");
        $this->assign("version", $version);
        if ($version)
        {
            $where["version"] = $version;
        }

        //获取所有用户
        $list = Db::name("app_version")
            ->where($where)
            ->order("version_num DESC")
            ->paginate(20);

        $this->assign("list", $list);

        return $this->fetch();
    }
    //添加
    public function add(){
        if (request()->isGet())
        {
            //获取最新版本
            $version = Db::name('app_version')
                ->order('version_num DESC')
                ->value('version');
            $version ? $this->assign('version', $version) : $this->assign('version', '尚未添加版本');
            return $this->fetch();
        }

        //处理
        if (request()->isPost())
        {
//            //身份验证token
//            input('token') ? $token = input('token') : $this->error('请填写身份认证信息！');
//
//            //验证token(530ce5a465ba00d08e122ccecdd3cafc)
//            if ($token != strtolower(md5('yuhan' . md5('tnnc'))))
//            {
//                $this->error('身份认证失败！');
//            }

            //一级版本号
            intval(input('version_1')) > 0 ? $version1 = intval(input('version_1'))
                : $this->error('一级版本号必须填写，且只能填写大于等于1的整数！');
            //二级版本
            intval(input('version_2')) >= 0 ? $version2 = intval(input('version_2'))
                : $this->error('二级版本号必须填写，且只能填写大于等于0的整数！');
            //三级版本
            $version3 = intval(input('version_3')) >= 0 ? intval(input('version_3')) : 0;

            //生成版本号
            $version = $version3 + $version2 * 100 + $version1 * 10000;

            //判断该版本是否存在
            $apk = Db::name('app_version')->where('version_num', $version)->find();
            if ($apk) $this->error('版本号为 $version1.$version2.$version3 的安装包已存在！');

            //判断版本号是否小于当前版本
            $apk = Db::name('app_version')->where('version_num', 'GT', $version)->find();
            if ($apk) $this->error('已存在版本号大于 $version1.$version2.$version3 的安装包！');

            //描述内容
            $desc = input('desc');

            //上传文件
            $apkName = $this->uploadApk();

            Db::name('app_version')
                ->insert(array(
                    'version_num' => $version,
                    'version' => $version1 . '.' . $version2 . '.' . $version3,
                    'desc' => $desc,
                    'url' => $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'] . $apkName,
                    'time' => time(),
                ));

            $this->success('添加新版本成功！新版本版本号为' . $version1 . '.' . $version2 . '.' . $version3 . '！',url('Appversion/index'));
        }
    }

    //上传文件
    private function uploadApk()
    {
        // 获取表单上传文件 例如上传了001.jpg
        $file = request()->file('apk');
        if(empty($file)){
            $this->error('安装包有误');
        }
        // 移动到框架应用根目录/public/uploads/ 目录下
        $savePath = config("upload_path") . '/' . "apks";
        is_dir($savePath) or mkdir($savePath, "0777", true);
        $info = $file->move($savePath);
        if($info){
            return '/uploads/apks/' . $info->getSaveName();
        }else{
            // 上传失败获取错误信息
            $this->error($file->getError());
        }
    }
}